import router from './router'
import store from '@/store'
// 导入修改当前页面标题的组件
import getPageTitle from '@/utils/get-page-title'
const whiteList = ['/login', '/404'] // 白名单
// 路由页面跳转进度条
// 导入进度条插件
import NProgress from 'nprogress'
// 导入进度条样式
import 'nprogress/nprogress.css'
// 基础的权限拦截
// 1.登录状态下，不能手动切换到/login页面，如果切换强制回到/首页
// 2．未登录状态下，只能去/login页面(白名单)，其他页面你不能跳转
// 刷新网页也会使前置守卫再走一遍
router.beforeEach(async(to, from, next) => {
  // 拿到token
  const token = store.getters.token
  if (token) {
    // 显示进度条效果
    NProgress.start()
    // 有token 登录状态
    if (to.path === '/login') {
      // 登录状态 再去登录页就不允许去 停留在当前页面
      next('/')
      NProgress.done()// 重定向，就会导致上一次路由终端，启动的进度条需要手动关闭,
      // 重定向会导致路由守卫再次执行，再次开启一个进度条，跳转后关闭
    } else {
      // 如果没有用户名字，先请求等待成功后，我们放行页面next()
      // 如果有名字了if进不去，也要走next()放行页面
      // 去提起他页面就放行
      // 这里先next() 不然 token过期, 带回的未遂地址 不是当前路由页面, 先让路由跳转再请求用户信息.
      next()
      if (!store.getters.name) {
        await store.dispatch('user/getUserInfoActions')
      }
    }
  } else {
    // 没有token 未登录状态
    if (whiteList.includes(to.path)) {
      // 未登录但是去把名单里边的页面,就放行
      next()
    } else {
      // 未登录 还要去别的页面  就必须去登录页 登录
      next('/login')
      NProgress.done()
    }
  }
})
// 后置守卫
router.afterEach((to, from) => {
  // 隐藏进度条效果
  NProgress.done()
  // 当网页切换完毕之后,网页标题是当前网页的标题
  // console.log(to)
  document.title = getPageTitle(to.meta.title)
})
